//手机号

extension StringPhone on String {
  String get phoneSimple {
    var mobile = this;
    if (mobile.length > 4) {
      var sufixLength = (mobile.length - 4) ~/ 2;
      var prefixLength = mobile.length - 4 - sufixLength;
      return '${mobile.substring(0, prefixLength)}****${mobile.substring(mobile.length - sufixLength, mobile.length)}';
    } else {
      return mobile;
    }
  }

  ///大陆手机号码11位数，匹配格式：前三位固定格式+后8位任意数
  /// 此方法中前三位格式有：
  /// 13+任意数 * 15+除4的任意数 * 18+除1和4的任意数 * 17+除9的任意数 * 147
  bool get isPhone {
    return RegExp(
      '^((13[0-9])|(15[^4])|(166)|(17[0-8])|(18[0-9])|(19[8-9])|(147,145))\\d{8}\$',
    ).hasMatch(this);
  }

  bool get isEmail {
    return RegExp(
      r"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$",
    ).hasMatch(this);
  }

  bool get isIdCard {
    return RegExp(r"\d{17}[\d|x]|\d{15}").hasMatch(this);
  }

  bool get isChinese {
    return RegExp(
      r"^[\u4e00-\u9fa5],{0,}$",
    ).hasMatch(this);
  }

  bool get isLetter {
    return RegExp(
      r"^[a-zA-Z]+$",
    ).hasMatch(this);
  }

  bool get isNumber {
    return RegExp(
      r"^[0-9]+$",
    ).hasMatch(this);
  }

  bool get isHaveSpecialCharacters {
    return RegExp(r'[`~!@#$%^&*()_+=|;:(){}'
            ',\\[\\].<>/?~！@#￥%……&*（）——+|{}【】‘；：”“’。，、？-]')
        .hasMatch(this);
  }
}
